package j.framework.base.service;

import j.framework.core.*;
import j.util.jdbc.JdbcTemplate;

import java.sql.Connection;
import java.util.List;
import java.util.Map;

/**
 * 应用程序接口，用来获取系统的配置、系统模块
 * User: jason
 * Date: 2014/11/6 13:55
 */
public interface ApplicationService {
    /**
     * 根据key获取此关键词的配置，以字符串形式返回
     * @param key
     * @return
     */
    String getSetting(String key);

    /**
     * 获取指定模块的实例类
     * @param fid
     * @return
     */
    Function getFunction(String fid);

    /**
     * 获取指定字典的字典项
     * @param dictId
     * @return
     */
    List<DictItem> getDictItems(String dictId);

    /**
     * 获取所有字典项，并封装到map中
     * @return
     */
    Map<String,DictItem> getAllDictItems(String dictID);

    /**
     * 获取所有字典项，并封装到map中
     * @return
     */
    Map<String,DictItem> getAllDictItems();

    /**
     * 获取系统中当前定义的所有字典
     * @return
     */
    List<Dict> getDictionaries();

    /**
     * 获取指定请求的相关配置
     * @param requestId
     * @return
     */
    WebRequestConfiguration getWebRequestConfiguration(String requestId);

    /**
     * 获取指定模块下的所有操作权限
     * @param fid
     * @return
     */
    List<Action> getFunctionActions(String fid);

    /**
     * 获取所有的用户
     * @return
     */
    Map<String,DictItem> getAllUsers();

    /**
     * 获取所有的部门
     * @return
     */
    Map<String,DictItem> getAllDepts();

    /**
     * 记录系统日志
     * @param log
     */
    void log(SysLog log);

    /**
     * 记录系统日志
     * @param jt JdbcTemplate
     * @param log
     */
    void log(JdbcTemplate jt, SysLog log);

    /**
     * 批量记录日志
     * @param jt
     * @param logs
     */
    void log(JdbcTemplate jt, List<SysLog> logs);
}
